package org.sadhar.sipp.perekamanunitposbiayakhusus;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.sadhar.errhandler.ClassAntiNull;
import org.sadhar.sia.framework.ClassApplicationModule;
import org.sadhar.sipp.perekamanitembiaya.PerekamanItemBiayaDAO;
import org.sadhar.sipp.perekamanitembiaya.PerekamanItemBiayaDAOImpl;
import org.sadhar.sipp.perekamankelompokbiaya.PerekamanKelompokBiayaDAO;
import org.sadhar.sipp.perekamankelompokbiaya.PerekamanKelompokBiayaDAOImpl;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Label;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Toolbarbutton;
import org.zkoss.zul.Window;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zul.Hbox;

public class PerekamanUnitPosBiayaKhususWnd extends ClassApplicationModule {

    private Combobox cmbboxTahunKelompokAnggaran;
    private Label lblNamaUnitKerja;
    private Listbox lstboxDaftarKelompokBiayaPosKhusus;
    private Listbox lstboxDaftarPosBiayaKhusus;
    private PerekamanKelompokBiayaDAO kelompokBiayaDAO;
    private PerekamanUnitPosBiayaKhususDAO unitPosBiayaKhususDAO;
    private PerekamanItemBiayaDAO itemDAO;
    private Textbox txtboxKeySearch;
    private Textbox txtboxKodeUnitKerja;

    public PerekamanUnitPosBiayaKhususWnd() {
        kelompokBiayaDAO = new PerekamanKelompokBiayaDAOImpl();
        unitPosBiayaKhususDAO = new PerekamanUnitPosBiayaKhususDAOImpl();
        itemDAO = new PerekamanItemBiayaDAOImpl();
    }

    public void onCreate() throws Exception {
        txtboxKeySearch = (Textbox) getFellow("txtboxKeySearch");
        cmbboxTahunKelompokAnggaran = (Combobox) getFellow("cmbBoxTahunKelompokAnggaran");

        txtboxKodeUnitKerja = (Textbox) getFellow("txtboxKd_unit_kerja");
        lblNamaUnitKerja = (Label) getFellow("lblNamaUnitKerja");
        lstboxDaftarPosBiayaKhusus = (Listbox) getFellow("lstboxDaftarPosBiayaKhusus");
        lstboxDaftarKelompokBiayaPosKhusus = (Listbox) getFellow("lstboxDaftarKelompokBiayaPosKhusus");
        clear();
        loadCmbboxTahunKelompokAnggaran();
    }

    public void txtBoxKdUnitKerjaOnChange() {

        List<Map> maps = unitPosBiayaKhususDAO.listDetailsByTahunAndUnitKerja(
                ClassAntiNull.AntiNullString(cmbboxTahunKelompokAnggaran.getValue()),
                ClassAntiNull.AntiNullString(txtboxKodeUnitKerja.getValue()));

        List<Map> mapByTahun = unitPosBiayaKhususDAO.listDetails(ClassAntiNull.AntiNullString(cmbboxTahunKelompokAnggaran.getValue()));

        for (Map map : mapByTahun) {
            String kodeKelompokBiaya = ClassAntiNull.AntiNullString(map.get("kodeKelompokBiaya"));
            Checkbox cb = (Checkbox) getFellow(kodeKelompokBiaya);
            cb.setChecked(false);
            cb.setDisabled(false);
        }

        for (Map map : maps) {
            String kodeKelompokBiaya = ClassAntiNull.AntiNullString(map.get("kodeKelompokBiaya"));
            Checkbox cb = (Checkbox) getFellow(kodeKelompokBiaya);
            cb.setChecked(true);
            cb.setDisabled(false);
        }

    }

    public void loadGridDaftarKelompokBiayaPosKhusus() {
        try {
            List<Map> listMap = kelompokBiayaDAO.listByTahunAndIsUmum(
                    cmbboxTahunKelompokAnggaran.getValue(), "N");

            lstboxDaftarKelompokBiayaPosKhusus.getItems().clear();
            for (final Map m : listMap) {
                Listitem item = new Listitem();
                item.setValue(m);
                Checkbox checkNamaPosBiaya = new Checkbox(ClassAntiNull.AntiNullString(m.get("namaPosBiaya")));
                checkNamaPosBiaya.setId(ClassAntiNull.AntiNullString(m.get("kodeKelompokBiaya")));
                Listcell checkNamaListcell = new Listcell();
                checkNamaListcell.appendChild(checkNamaPosBiaya);
                item.appendChild(checkNamaListcell);
                item.appendChild(new Listcell());

                Toolbarbutton toolbarbtnDetail = new Toolbarbutton();
                toolbarbtnDetail.setLabel("[detail]");
                toolbarbtnDetail.addEventListener("onClick",
                        new EventListener() {

                            @Override
                            public void onEvent(Event arg0) throws Exception {
                                final Window win = (Window) Executions.createComponents(
                                        "sippzul/perekamanunitposbiayakhusus/DetailPosBiayaPopup.zul",
                                        getRoot(), null);
                                Label lblNamaPosBiaya = (Label) win.getFellow("lblNamaPosBiaya");
                                Label lblJenisAnggaran = (Label) win.getFellow("lblJenisAnggaran");
                                Label lblStatusKelompokBiaya = (Label) win.getFellow("lblStatusKelompokBiaya");
                                Label lblPengurusBiaya = (Label) win.getFellow("lblPengurusBiaya");

                                lblNamaPosBiaya.setValue(ClassAntiNull.AntiNullString(m.get("namaPosBiaya")));
                                lblJenisAnggaran.setValue(ClassAntiNull.AntiNullString(m.get("jenisBiaya")));
                                lblPengurusBiaya.setValue(ClassAntiNull.AntiNullString(m.get("kelompokPengurusBiaya")));

                                String isUmum = ClassAntiNull.AntiNullString(m.get("isUmum"));
                                if (isUmum.trim().equalsIgnoreCase("Y")) {
                                    lblStatusKelompokBiaya.setValue("Umum");
                                } else {
                                    lblStatusKelompokBiaya.setValue("Khusus");
                                }

                                win.doModal();
                            }
                        });
                Hbox box = new Hbox();
                box.appendChild(toolbarbtnDetail);
                Listcell lbox = new Listcell();
                lbox.appendChild(box);
                item.appendChild(lbox);
                lstboxDaftarKelompokBiayaPosKhusus.appendChild(item);

            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void lstboxDaftarPosBiayaKhususOnSelect() {
        Map m = (Map) lstboxDaftarPosBiayaKhusus.getSelectedItem().getValue();
        cmbboxTahunKelompokAnggaran.setValue(ClassAntiNull.AntiNullString(m.get("tahunKelompok")));
        if (ClassAntiNull.AntiNullString(m.get("Nama_unit_kerja")).trim().equalsIgnoreCase("")) {
            txtboxKeySearch.setValue(ClassAntiNull.AntiNullString(m.get("Nama_unit_kerjaHidden")));
            lblNamaUnitKerja.setValue(ClassAntiNull.AntiNullString(m.get("Nama_unit_kerjaHidden")));
        } else {
            txtboxKeySearch.setValue(ClassAntiNull.AntiNullString(m.get("Nama_unit_kerja")));
            lblNamaUnitKerja.setValue(ClassAntiNull.AntiNullString(m.get("Nama_unit_kerja")));
        }
        txtboxKodeUnitKerja.setValue(ClassAntiNull.AntiNullString(m.get("Kd_unit_kerja")));

        List<Map> maps = unitPosBiayaKhususDAO.listDetailsByTahunAndUnitKerja(
                ClassAntiNull.AntiNullString(m.get("tahunKelompok")),
                ClassAntiNull.AntiNullString(m.get("Kd_unit_kerja")));

        List<Map> mapByTahun = unitPosBiayaKhususDAO.listDetails(ClassAntiNull.AntiNullString(m.get("tahunKelompok")));

        for (Map map : mapByTahun) {
            String kodeKelompokBiaya = ClassAntiNull.AntiNullString(map.get("kodeKelompokBiaya"));
            Checkbox cb = (Checkbox) getFellow(kodeKelompokBiaya);
            cb.setChecked(false);
            cb.setDisabled(true);
        }

        for (Map map : maps) {
            String kodeKelompokBiaya = ClassAntiNull.AntiNullString(map.get("kodeKelompokBiaya"));
            Checkbox cb = (Checkbox) getFellow(kodeKelompokBiaya);
            cb.setChecked(true);
            cb.setDisabled(true);
        }

    }

    public void cmbBoxTahunKelompokAnggaranOnChange() {

        loadGridDaftarKelompokBiayaPosKhusus();
        loadGridDaftarPosBiayaKhusus();
    }

    public void loadGridDaftarPosBiayaKhusus() {
        lstboxDaftarPosBiayaKhusus.getItems().clear();
        List<Map> listMap = unitPosBiayaKhususDAO.listDetails(cmbboxTahunKelompokAnggaran.getValue());
        for (final Map m : listMap) {
            Listitem item = new Listitem();
            item.setValue(m);
            item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("Nama_unit_kerja"))));
            item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("namaPosBiaya"))));
            item.appendChild(new Listcell());

            final Window window = this;
            if (!ClassAntiNull.AntiNullString(m.get("Nama_unit_kerja")).trim().equalsIgnoreCase("")) {
                Toolbarbutton toolbarbtnUbah = new Toolbarbutton();
                toolbarbtnUbah.setLabel("[ubah]");
                toolbarbtnUbah.addEventListener("onClick", new EventListener() {

                    @Override
                    public void onEvent(Event arg0) throws Exception {
                        Combobox cmbBoxTahunKelompokAnggaran = (Combobox) window.getFellow("cmbBoxTahunKelompokAnggaran");
                        Textbox txtboxKeySearch = (Textbox) window.getFellow("txtboxKeySearch");
                        Textbox txtboxKd_unit_kerja = (Textbox) window.getFellow("txtboxKd_unit_kerja");
                        Label lblNamaUnitKerja = (Label) window.getFellow("lblNamaUnitKerja");

                        cmbBoxTahunKelompokAnggaran.setValue(ClassAntiNull.AntiNullString(m.get("tahunKelompok")));
                        txtboxKeySearch.setValue(ClassAntiNull.AntiNullString(m.get("Nama_unit_kerja")));
                        lblNamaUnitKerja.setValue(ClassAntiNull.AntiNullString(m.get("Nama_unit_kerja")));
                        txtboxKd_unit_kerja.setValue(ClassAntiNull.AntiNullString(m.get("Kd_unit_kerja")));

                        List<Map> maps = unitPosBiayaKhususDAO.listDetailsByTahunAndUnitKerja(
                                ClassAntiNull.AntiNullString(m.get("tahunKelompok")),
                                ClassAntiNull.AntiNullString(m.get("Kd_unit_kerja")));

                        List<Map> mapByTahun = unitPosBiayaKhususDAO.listDetails(ClassAntiNull.AntiNullString(m.get("tahunKelompok")));

                        for (Map map : mapByTahun) {
                            String kodeKelompokBiaya = ClassAntiNull.AntiNullString(map.get("kodeKelompokBiaya"));
                            Checkbox cb = (Checkbox) window.getFellow(kodeKelompokBiaya);
                            cb.setChecked(false);
                            cb.setDisabled(false);
                        }

                        for (Map map : maps) {
                            String kodeKelompokBiaya = ClassAntiNull.AntiNullString(map.get("kodeKelompokBiaya"));
                            Checkbox cb = (Checkbox) window.getFellow(kodeKelompokBiaya);
                            cb.setChecked(true);
                            cb.setDisabled(false);
                        }

                    }
                });
                Hbox box = new Hbox();
                box.appendChild(toolbarbtnUbah);
                Listcell lbox = new Listcell();
                lbox.appendChild(box);
                item.appendChild(lbox);

            }
            lstboxDaftarPosBiayaKhusus.appendChild(item);
        }

    }

    public void clear() {
        cmbBoxTahunKelompokAnggaranOnChange();
        txtboxKeySearch.setValue("");
        lblNamaUnitKerja.setValue(".............");
        txtboxKodeUnitKerja.setValue("");
        txtboxKeySearch.setDisabled(false);
        cmbboxTahunKelompokAnggaran.setDisabled(false);

    }

    public void loadCmbboxTahunKelompokAnggaran() {
        cmbboxTahunKelompokAnggaran.getItems().clear();
        for (Map map : kelompokBiayaDAO.listDistinct()) {
            Comboitem item = new Comboitem(map.get("tahunKelompok").toString());
            cmbboxTahunKelompokAnggaran.appendChild(item);
        }
    }

    public void btnSimpanOnClick() {
        if (cmbboxTahunKelompokAnggaran.getValue().trim().equalsIgnoreCase("")) {
            try {
                Messagebox.show("Silahkan Masukkan Tahun", "Pesan Kesalahan",
                        Messagebox.OK, Messagebox.INFORMATION);
                cmbboxTahunKelompokAnggaran.setFocus(true);
                return;
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }

        }

        if (txtboxKeySearch.getValue().trim().equalsIgnoreCase("")) {
            try {
                Messagebox.show("Silahkan Pilih Unit Kerja", "Pesan Kesalahan",
                        Messagebox.OK, Messagebox.INFORMATION);
                txtboxKeySearch.setFocus(true);
                return;
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }

        }
        try {
            List<Map> mapByTahun = kelompokBiayaDAO.listByTahunAndIsUmum(cmbboxTahunKelompokAnggaran.getValue(), "N");
            List<String> listKodeKelompok = new ArrayList<String>();
            for (Map map : mapByTahun) {
                String kodeKelompokBiaya = ClassAntiNull.AntiNullString(map.get("kodeKelompokBiaya"));
                Checkbox cb = (Checkbox) getFellow(kodeKelompokBiaya);

                PerekamanUnitPosBiayaKhusus o = new PerekamanUnitPosBiayaKhusus();
                o.setKodeUnitKerja(txtboxKodeUnitKerja.getValue());
                o.setKodeKelompokBiaya(Integer.parseInt(map.get("kodeKelompokBiaya").toString()));
                o.setNamaTableItem(null);
                // revisied by : pritty & sarah (BAPSI), tgl 09-12-2009
                if (cb.isChecked()) {
                    //listKodeKelompok.add(ClassAntiNull.AntiNullString(map.get("kodeKelompokBiaya")));
                    if (unitPosBiayaKhususDAO.cekDataPosBiayaKhusus(o.getKodeKelompokBiaya(), o.getKodeUnitKerja()).size() == 0) {
                        unitPosBiayaKhususDAO.insert(o);
                    }

                } else {
                    String PesanKonfirmasi = "";
                    if (unitPosBiayaKhususDAO.cekDataPosBiayaKhusus(o.getKodeKelompokBiaya(), o.getKodeUnitKerja()).size() > 0) {
                        int hapus = 0;
                        String nama = "";
                        nama = ClassAntiNull.AntiNullString(map.get("namaPosBiaya"));
                        if (unitPosBiayaKhususDAO.cekData(o.getKodeKelompokBiaya(), o.getKodeUnitKerja()).size() > 0) {
                            PesanKonfirmasi = "Data tersebut sedang digunakan di fitur lain" + "\n" +
                                    "Apakah Data Pos Biaya " + nama + " yakin akan dihapus?";
                            hapus = 1;
                        } else {
                            PesanKonfirmasi = "Apakah Data Pos Biaya " + nama + " yakin akan dihapus?";
                            hapus = 1;
                        }
                        if (hapus == 1) {
                            try {
                                if (Messagebox.show(PesanKonfirmasi, "Konfirmasi", Messagebox.YES | Messagebox.NO, null) == Messagebox.YES) {
                                    unitPosBiayaKhususDAO.deletePosBiayaKhusus(o.getKodeKelompokBiaya(), o.getKodeUnitKerja());
                                    unitPosBiayaKhususDAO.deleteAnggaranByKodeKelompokBiaya(o.getKodeKelompokBiaya(), o.getKodeUnitKerja());
                                }
                            } catch (Exception e) {
                                Messagebox.show("Gagal menghapus data " + e.getMessage(), "Error", Messagebox.OK, Messagebox.ERROR);
                            }
                        }
                    }
                }
            }
            /* tgl 10-12-2009
            String kodeUnitKerja = txtboxKodeUnitKerja.getValue();
            unitPosBiayaKhususDAO.deleteAll(kodeUnitKerja);
            for (String kodeKelompok : listKodeKelompok) {
            PerekamanUnitPosBiayaKhusus o = new PerekamanUnitPosBiayaKhusus();
            o.setKodeUnitKerja(kodeUnitKerja);
            o.setKodeKelompokBiaya(Integer.parseInt(kodeKelompok));
            o.setNamaTableItem(null);
            unitPosBiayaKhususDAO.insert(o);

            }*/
            clear();
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }

    public void btnBatalOnClick() throws Exception {
        clear();
        loadCmbboxTahunKelompokAnggaran();
        loadGridDaftarPosBiayaKhusus();
    }

    public void btnCariOnClick() throws Exception {
        final Window win = (Window) Executions.createComponents(
                "sippzul/perekamanunitposbiayakhusus/UnitKerjaPopup.zul", this,
                null);
        Textbox txtboxSearch = (Textbox) win.getFellow("txtboxSearch");
        txtboxSearch.setValue(txtboxKeySearch.getValue());
        win.doModal();

        txtBoxKdUnitKerjaOnChange();
    }
}
